package br.com.beautycenter.view;

import br.com.beautycenter.Funcionalidades.Pesquisas;
import br.com.beautycenter.Funcionalidades.Swing;
import br.com.beautycenter.Funcionalidades.Validacoes;
import br.com.beautycenter.DAO.PersisteProduto;
import br.com.beautycenter.bean.Produto;
import java.awt.event.KeyEvent;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class PesquisarProduto extends javax.swing.JDialog {

    CadastroProdutos cadastroProdutos;
    PersisteProduto persisteProduto = new PersisteProduto();
    
    List<Produto> listaProdutos = new ArrayList<Produto>();
    
    Produto produto = new Produto();
    
    int selecao = 0;
   
    public void inicializarDialog(){
        cadastroProdutos = (CadastroProdutos) this.getParent();
    }
    
    /**
     * Veririca primeiro se o valor digitado é um número. Caso seja, consulta no banco de dados se existe o produto.
     * @return 
     * <b>true</b> - Localizou o produto<br/>
     * <b>false</b> - Valor digitado é inválido ou não achou o produto<br/>
     */
    public boolean validarCodigo(){
        if(!txtValor.getText().trim().isEmpty() && Validacoes.validarCampoNumerico(txtValor.getText())){
            produto = new Produto();
            produto.setIdProduto(Integer.valueOf(txtValor.getText()));
            produto = persisteProduto.retornarProdutoPeloID(produto);
            
            if(produto != null) return true;
            JOptionPane.showMessageDialog(null, "Produto não cadastrado no sistema!");
            return false;
        }
        
        JOptionPane.showMessageDialog(null, "Valor digitado não é um código válido!");
        txtValor.requestFocus();
        return false;
    }    
    
   /**
     * Veririca primeiro se o valor digitado é um código de barras. Caso seja, consulta no banco de dados se existe o produto.
     * @return 
     * <b>true</b> - Localizou o produto<br/>
     * <b>false</b> - Valor digitado é inválido ou não achou o produto<br/>
     */
    public boolean validarCodigoBarras(){
        
        if(!txtValor.getText().trim().isEmpty()){
            produto = new Produto();
            produto.setCodigoBarras(txtValor.getText().trim());
            produto = persisteProduto.retornarProdutoPeloCodigoBarras(produto);
            if(produto == null){
                JOptionPane.showMessageDialog(null, "Produto não cadastrado no sistema!");
                txtValor.requestFocus();
                return false;  
            }
            
            return true;
        }else{
            JOptionPane.showMessageDialog(null, "Nenhum codigo de barras foi informado!");
            txtValor.requestFocus();
            return false;        
        }       
        
    }
   /**
     * Verifica se o campo está vazio. Caso não esteja, consulta no banco de dados se existe o produto (usando o like).
     * @return 
     * <b>true</b> - Localizou o produto<br/>
     * <b>false</b> - Valor digitado é inválido ou não achou o produto<br/>
     */
    public boolean validarNome(){
        
       if(!txtValor.getText().trim().isEmpty()){
            produto = new Produto();
            produto.setDescricao(txtValor.getText().trim());
            listaProdutos = persisteProduto.retornarProdutoPeloNome(produto);
            return true;
        }else{      
        JOptionPane.showMessageDialog(null, "Valor digitado é inválido!");
        txtValor.requestFocus();
        return false;
       }
       
    }

    
    /**
     * Feita as devidas validações, passamos o funcionário para o formulário de cadastro.
     */
    public void selecionarProduto(){
        int posicao = Pesquisas.pesquisarNaListaPeloId(
                            cadastroProdutos.listaProdutos, produto);
        
        if(posicao > -1) {
            cadastroProdutos.posicao = posicao;
            cadastroProdutos.exibirProduto();
        }
        this.dispose();
    }  
    
   /**
     * Chama a função referente ao tipo selecionado
     */
    public void definirFuncoes(){
        selecao = jComboTipo.getSelectedIndex();

        switch(selecao){
            case 0:
                if(validarCodigo()){
                    selecionarProduto();
                }
                break;
                
            case 1:
                if(validarNome()){
                    //aqui ele vai selecionar o funcionario;
                    SelecionarProduto selecionarProduto = new SelecionarProduto(this, rootPaneCheckingEnabled);
                    selecionarProduto.setLocationRelativeTo(null);
                    selecionarProduto.setVisible(true);
                    
                    //se ele selecionar algum, então joga para a tela de cadastro de funcionário.
                    if(produto != null){
                        selecionarProduto();
                    }
                }
                break;
            
            case 2:
                if(validarCodigoBarras()){
                    selecionarProduto();
                }
                break;
        }
    }
    
    
    /**
     * Creates new form ConsultaFuncionario
     */
    public PesquisarProduto(JFrame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        inicializarDialog();
    }     

    public void limparCampos(){
        Swing.zerarCampos(jPanelValor.getComponents());
    }
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelPrincipal = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jComboTipo = new javax.swing.JComboBox();
        jPanelValor = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        txtValor = new javax.swing.JFormattedTextField();
        jPanel3 = new javax.swing.JPanel();
        btnPesquisar = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ERP BEAUTY CENTER - Pesquisa Produto");

        jPanelPrincipal.setBackground(new java.awt.Color(255, 255, 255));
        jPanelPrincipal.setPreferredSize(new java.awt.Dimension(380, 230));

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Busca Por"));

        jLabel1.setText("TIPO:");

        jComboTipo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Código", "Nome", "Código de barras" }));
        jComboTipo.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jComboTipoItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jComboTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 189, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(117, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jComboTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 12, Short.MAX_VALUE))
        );

        jPanelValor.setBackground(new java.awt.Color(255, 255, 255));
        jPanelValor.setBorder(javax.swing.BorderFactory.createTitledBorder("Valor"));

        jLabel2.setText("VALOR:");

        txtValor.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtValorKeyPressed(evt);
            }
        });

        javax.swing.GroupLayout jPanelValorLayout = new javax.swing.GroupLayout(jPanelValor);
        jPanelValor.setLayout(jPanelValorLayout);
        jPanelValorLayout.setHorizontalGroup(
            jPanelValorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelValorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtValor, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanelValorLayout.setVerticalGroup(
            jPanelValorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelValorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelValorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(txtValor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(14, Short.MAX_VALUE))
        );

        jPanel3.setBackground(new java.awt.Color(255, 255, 255));

        btnPesquisar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/Pesquisar.png"))); // NOI18N
        btnPesquisar.setToolTipText("PESQUISAR");
        btnPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPesquisarActionPerformed(evt);
            }
        });
        jPanel3.add(btnPesquisar);

        btnSair.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/Sair.png"))); // NOI18N
        btnSair.setToolTipText("SAIR");
        btnSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSairActionPerformed(evt);
            }
        });
        jPanel3.add(btnSair);

        javax.swing.GroupLayout jPanelPrincipalLayout = new javax.swing.GroupLayout(jPanelPrincipal);
        jPanelPrincipal.setLayout(jPanelPrincipalLayout);
        jPanelPrincipalLayout.setHorizontalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanelValor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanelPrincipalLayout.setVerticalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPrincipalLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelValor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(65, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 20, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jComboTipoItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jComboTipoItemStateChanged

    }//GEN-LAST:event_jComboTipoItemStateChanged

    private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPesquisarActionPerformed
        definirFuncoes();
    }//GEN-LAST:event_btnPesquisarActionPerformed

    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed
        CadastroProdutos cadastroProdutos = new CadastroProdutos();
        cadastroProdutos.ativarBotoesNovoEditarExcluir();
        this.dispose();
        
    }//GEN-LAST:event_btnSairActionPerformed

    private void txtValorKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtValorKeyPressed
           if (evt.getKeyCode() == KeyEvent.VK_ENTER){
             btnPesquisar.requestFocus();
         }
    }//GEN-LAST:event_txtValorKeyPressed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnPesquisar;
    private javax.swing.JButton btnSair;
    private javax.swing.JComboBox jComboTipo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanelPrincipal;
    private javax.swing.JPanel jPanelValor;
    private javax.swing.JFormattedTextField txtValor;
    // End of variables declaration//GEN-END:variables
}
